package 题目集.位运算.异或;

/**
 * https://leetcode.cn/problems/find-the-original-array-of-prefix-xor/description/
 */
public class 找出前缀异或的原始数组 {
    public int[] findArray(int[] pref) {
        int[] ans = new int[pref.length];
        ans[0]=pref[0];
        for (int i = 1; i < pref.length; i++) {
            /**
             * 先让temp^前面的所有值=0，
             * 而0^pref[i]=pref[i]
             * 所以ans需要先找到这个temp，然后再^pref[i]，这样ans[0]异或到ans[i]值就是pref[i]。
             * 自己^自己=0，所以temp=前面的所有值=pref[i-1]
             * 所以ans[i]=temp^pref[i]。
             */
            ans[i] = pref[i - 1] ^ pref[i];

        }
        return ans;
    }
}
